'''
Description: 
Version: 2.0
Autor: ruog__
Date: 2024-05-21 13:07:08
LastEditors: ruog__
LastEditTime: 2024-05-21 13:15:35
'''
#把度秒转成小数
def parse_loc_val(val, d):
    v = float(val)/100
    v = int(v) + (v-int(v))*100/60
    if d=='S' or d=='W':
        v = v * -1
    return v
#获取经纬度信息
def parse_gprmc(data):
    '''
    b'$GPRMC,111025.00,A,2517.033747,N,11019.176025,E,0.0,144.8,270920,2.3,W,A*2D\r\n'
    b'$GPRMC,,V,,,,,,,,,,N*53\r\n'
    b'$GPRMC,024443.0,A,2517.038296,N,11019.174048,E,0.0,,120201,0.0,E,A*2F\r\n'
    $GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF> 
    <1> UTC时间，hhmmss（时分秒）格式 
    <2> 定位状态，A=有效定位，V=无效定位 
    <3> 纬度ddmm.mmmm（度分）格式（前面的0也将被传输） 
    <4> 纬度半球N（北半球）或S（南半球） 
    <5> 经度dddmm.mmmm（度分）格式（前面的0也将被传输） 
    <6> 经度半球E（东经）或W（西经）
    <7> 地面速率（000.0~999.9节，前面的0也将被传输） 1节=1.852千米（km/h)
    <8> 地面航向（000.0~359.9度，以真北为参考基准，前面的0也将被传输） 
    <9> UTC日期，ddmmyy（日月年）格式 
    <10> 磁偏角（000.0~180.0度，前面的0也将被传输） 
    <11> 磁偏角方向，E（东）或W（西） 
    <12> 模式指示（仅NMEA0183 3.00版本输出，A=自主定位，D=差分，E=估算，N=数据无效）
    '''
    li = data.decode().replace('$GNRMC,', '').strip().split(',')
    lat=log=speed=direct=0
    if li[1] == 'A':
        lat = round(parse_loc_val(li[2], li[3]), 6)   #纬度
        log = round(parse_loc_val(li[4], li[5]), 6)   #经度
        speed = float(li[6]) * 1.852
        if len(li[7])>0:
            direct = float(li[7])
        else:
            direct = 0
        #logging.info('lat:{:.6f},log:{:.6f},speed:{},direct:{}'.format(lat, log, speed, direct))
    return (lat,log,speed, direct)

if __name__ == '__main__':
    data = b'$GNRMC,032950.000,A,3654.85788,N,11836.45083,E,2.56,199.13,210524,,,A*76'
    lat,log,speed, direct = parse_gprmc(data)
    print(lat,log,speed, direct)